package com.marketingcenter.service.impl;

import com.marketingcenter.entity.Coupon;
import com.marketingcenter.repository.CouponRepository;
import com.marketingcenter.service.CouponService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 优惠券服务实现类
 */
@Service
public class CouponServiceImpl extends PromotionServiceImpl<Coupon> implements CouponService {

    @Autowired
    private CouponRepository couponRepository;

    @Override
    protected JpaRepository<Coupon, Long> getRepository() {
        return couponRepository;
    }

    @Override
    public List<Coupon> findByStatus(Integer status) {
        return couponRepository.findByStatus(status);
    }

    @Override
    public List<Coupon> findActivePromotions() {
        LocalDateTime now = LocalDateTime.now();
        return couponRepository.findByStartTimeLessThanEqualAndEndTimeGreaterThanEqual(now, now);
    }

    @Override
    public boolean distributeCoupon(Long couponId, Long userId) {
        // 实际实现中需要记录用户领取优惠券的信息
        // 这里仅做简单示例
        Coupon coupon = findById(couponId);
        if (coupon != null && coupon.getStatus() == 1) { // 1表示进行中
            // 检查领取数量限制
            if (countUserReceived(couponId, userId) >= coupon.getMaxPerUser()) {
                return false;
            }
            // 检查总发行量
            if (coupon.getReceivedQuantity() >= coupon.getTotalQuantity()) {
                return false;
            }
            // 增加已领取数量
            coupon.setReceivedQuantity(coupon.getReceivedQuantity() + 1);
            update(coupon);
            return true;
        }
        return false;
    }

    @Override
    public boolean useCoupon(Long couponId, Long userId, Long orderId) {
        // 实际实现中需要记录用户使用优惠券的信息
        // 这里仅做简单示例
        Coupon coupon = findById(couponId);
        if (coupon != null && coupon.getStatus() == 1) { // 1表示进行中
            // 检查使用时间是否在有效期内
            LocalDateTime now = LocalDateTime.now();
            if (now.isBefore(coupon.getStartTime()) || now.isAfter(coupon.getEndTime())) {
                return false;
            }
            // 增加已使用数量
            coupon.setUsedQuantity(coupon.getUsedQuantity() + 1);
            update(coupon);
            return true;
        }
        return false;
    }

    @Override
    public int countUserReceived(Long couponId, Long userId) {
        // 实际实现中需要查询用户领取优惠券的记录
        // 这里仅做简单返回，实际应用中需要连接到用户领取记录表
        return 0;
    }

}